// 包声明：指定当前类所在的文件夹路径，com.itheima.variable表示在com/itheima/variable文件夹下
package com.itheima.variable;

// public：访问修饰符，表示这个类可以被任何地方访问
// class：关键字，用于定义一个类
// VariableDemo1：类名，遵循驼峰命名法，代表变量示例类1
public class VariableDemo1 {
    // public：方法可以被任何地方访问
    // static：静态方法，可以通过类名直接调用，不需要创建对象
    // void：返回值类型，表示方法不返回任何值
    // main：主方法名，是程序的入口点
    // String[] args：方法参数，接收命令行参数的字符串数组
    public static void main(String[] args) {
        // 目标：认识变量。
        // 调用printVariable()方法来学习变量的使用
        printVariable();
    }

    // 定义一个方法，来学习变量的定义
    // public：方法可以被任何地方访问
    // static：静态方法，可以通过类名直接调用
    // void：不返回任何值
    // printVariable：方法名，用于演示变量的定义和使用
    public static void printVariable() {
        // 定义变量: 数据类型 变量名称 = 初始值;
        // int：整型数据类型，表示整数
        // age：变量名，代表年龄
        // =：赋值运算符，将右边的值赋给左边的变量
        // 18：整数字面量，作为age变量的初始值
        int age = 18;
        // 输出age变量的值，将显示18
        System.out.println(age);

        // 定义一个小数变量，存储一个学生的Java成绩
        // double：双精度浮点型数据类型，用于存储小数
        // score：变量名，代表成绩
        // 90.5：小数字面量，作为score变量的初始值
        double score = 90.5;
        // 输出score变量的值，将显示90.5
        System.out.println(score);

        // 输出分隔线，用于区分不同部分的代码演示
        System.out.println("======================");

        // 为什么要用变量记住数据呢？ 可以提高处理数据的灵活性和维护性。
        // int：整型数据类型
        // number：变量名
        // 32：整数字面量
        int number = 32;
        // 多次输出同一个变量的值，可以避免重复写相同的数据，提高代码维护性
        System.out.println(number);
        System.out.println(number);
        System.out.println(number);
        System.out.println(number);
        System.out.println(number);
        System.out.println(number);

        // 输出分隔线
        System.out.println("======================");

        // 研究变量的特点：变量里的数据是可以被替换的
        // int：整型数据类型
        // age2：变量名
        // 18：初始值
        int age2 = 18;
        // 变量的重新赋值：将19赋值给age2变量，覆盖原来的值
        age2 = 19; // 赋值 （从右边往左边看）
        // 输出age2的新值，将显示19
        System.out.println(age2); // 19

        // 使用变量自身进行计算后重新赋值：先计算age2+1（19+1=20），然后将结果赋给age2
        age2 = age2 + 1; // 赋值 （从右边往左边看）
        // 输出age2的最新值，将显示20
        System.out.println(age2); // 20

        // 输出分隔线
        System.out.println("======================");

        // 需求：微信钱包目前有9.9，发出去了5元，又收到了6元，请实时输出钱包金额。
        // double：双精度浮点型，用于存储小数金额
        // money：变量名，代表钱包金额
        // 9.9：初始金额
        double money = 9.9;
        // 输出初始钱包金额
        System.out.println(money);

        // 发出去了5元
        // 计算当前金额减去5元的结果，然后赋给money变量
        money = money - 5;  // 赋值 （从右边往左边看）
        // 输出发钱后的钱包金额
        System.out.println(money);

        // 又收到了6元
        // 计算当前金额加上6元的结果，然后赋给money变量
        money = money + 6;
        // 输出收钱后的最终钱包金额
        System.out.println(money);

        // 输出分隔线
        System.out.println("======================");

        // char：字符型数据类型，用于存储单个字符
        // ch：变量名
        // 'A'：字符字面量，字符A在ASCII编码中对应的数值是65
        char ch = 'A';  // 65的二进制。
        // 字符与数字相加时，字符会自动转换为对应的ASCII码值进行计算
        // 'A' + 1 相当于 65 + 1 = 66，然后输出结果
        System.out.println(ch + 1); // 66

        // char：字符型数据类型
        // ch2：变量名
        // 'a'：字符字面量，小写字母a在ASCII编码中对应的数值是97
        char ch2 = 'a';  // 97的二进制。
        // 'a' + 1 相当于 97 + 1 = 98，然后输出结果
        System.out.println(ch2 + 1); // 98

        // 输出分隔线
        System.out.println("======================");

        // 程序中可以直接写进制数据
        // int：整型数据类型
        // i1：变量名
        // 0B01100001：二进制数字，表示以0B开头的二进制数，转换为十进制是97
        int i1 = 0B01100001; // 二进制 必须以0B 开头
        // 输出i1的值，将显示97
        System.out.println(i1);

        // int：整型数据类型
        // i2：变量名
        // 0141：八进制数字，表示以0开头的八进制数，转换为十进制是97
        int i2 = 0141; // 八进制 必须以0开头
        // 输出i2的值，将显示97
        System.out.println(i2);

        // int：整型数据类型
        // i3：变量名
        // 0XFA：十六进制数字，表示以0X开头的十六进制数，转换为十进制是250
        int i3 = 0XFA; // 十六进制 必须以0X开头
        // 输出i3的值，将显示250
        System.out.println(i3);
    }
}
